SSRF Vulnerability

SSRF Nedir?

Web siteleri farklı web siteleri-kaynaklar ile iletişim halinde olabilir. Bu iletişim sırasında hedef sunucunun dosyasını çalıştırabilmekte. Örnek bir url ile gösterelim: https://alperencoskun.com/cesitligörsel?referance=https://saldirgansitesi.com/ssrf.png

Örnekten anlayacağımız üzere alperencoskun.com sitesi saldirgansitesi.com sitesinden bir istekte bulunuyor ve bulunduğu istek sayesinde kendi sunucusunda başka bir siteden dosya çalıştırabiliyor. Bunu sadece url üzerinde düşünmemeliyiz. BurpSuite ile giden gelen paketleri inceleyerek potansiyel açıkları görme imkânımız olabilir.

 İşte bizim ilgileneceğimiz kısım da burada başlıyor. SSRF (Server-side request forgery ) Sunucu taraflı istek sahteciliğine gelen bu açık ile kurban sunucuya sahte istekler atılır ve sunucularında zararlı dosya çalıştırmamıza izin verir. Sadece başka bir kaynak olarak da düşünmemek gerekir. Sunucuların kendilerine karşı da bir ssrf zafiyetleri olabilir örnek verelim: (https://alperencoskun.com/cesitligorsel?referance=http://localhost/admin) burada kendi sunucusundan eğer varsa admin sayfasını çağırmış olduk. Bir sunucuda dosya çalıştırabilmek çok büyük hasarlara sebebiyet verebilir. Admin haklarına erişme, uzaktan kod yürütme gibi kritik açıklara bu zafiyet sayesinde ulaşılabilir.

 

Nasıl Test Edilir?

SSRF saldırısı için inceleme aşamasında sayfa kaynağını inceleyerek site herhangi bir kaynağın verilerini kullanıyor mu, sayfa kaynağında çıkmazsa BurpSuite ile paket incelemesi yapılabilir. Ayrıca aşağı bölümde belirteceğim şekilde farklı parametreler kullanarak SSRF zafiyetinin tespitini yapabiliriz. Manuel olarak kaynak url değiştirilerek yapabileceğimizi söylemiştik zaten.

SSRF’ten örnek verirken bWAPP in RFI LFI açığına ayrı değineceğimiz için aşağıdaki 2. SSRF (XXE) saldırısını yapacağız. 

image

 

Bize aşağıdaki gibi aslında kodu ve nereye ulaşacağımızı belirtmiş.

image

 

XXE zafiyet bölümüne geldik.

 

Karşımıza çıkan sayfada BurpSuite ile paket incelemeyi başlattık ve Any Bugs butonuna tıkladık. Bu kısımda XXE saldırısıyla beraber SSRF saldırısı yapmış olacağız. SSRF bu yüzden geniş bir etkisi var diyebiliriz.

Paket geldi ve Repeater a yolladım. Biz Bu paketi XXE kodunun olduğu bölümü manipüle edeceğiz ve http://localhost/bWAPP/passwords/heroes.xml adresinden veri çekmeye çalışacağız. Kodumuz aşağıdaki gibi olacak.

 

image

Kodu kısaca açıklamak gerekirse; resource bölümünde bu  kaynaktan veri al diyoruz. http://localhost/bWAPP/passwords/heroes.xml

 

image

 

 

 

 

 

Response bölümünde bize şifreli bir şekilde veri geldi. Bu veriyi de BurpSuite Decoder özelliğini aşağıdaki gibi kullanarak çözebiliriz.

image

Ve bWAPP labını tamamladık. Şimdi de PortSwigger labına geçelim.

image

Bu labda bizim sunucunun kendine karşı ssrf zafiyetini bulmamız ve admin paneline ulaşmamız istenmiş. Admin panelinden de Carlos kullanıcısını silmemizi istemiş.

Şimdi bu kısımda herhangi bir ürünün view details bölümüne tıklıyoruz. Burpsuite paket incelemeyi başlatıyoruz.

image

Zaten check stock bölümüne tıkladığımızda bize kaç units bulunuyor bunun hakkında bilgi veriyor. Yani arka planda sayısal işlemler dönüyor ve bize bir cevap getiriyor.

image

Burada bir api kullandığını ve bir kaynaktan veri çektiğini de görüyoruz. Yapacağımız şey şu labın bizden istediği şeyi yani http://localhost/admin sayfasından kaynak çekmeye çalışacağız. 

image

Aslında bu kısımda admin panele ulaşabildik fakat kullanıcı silmede hata aldık. Bu sefer kullanıcı silme işlemi için yönlendirdiği url ye SSRF saldırısı ile ulaşarak url üzerinden silmeye çalışacağız.

Aynı şekilde paketi tekrar yolluyorum fakat bu sefer kaynağı silme koduna yönlendiriyorum.

 

image

Ve Carlos kullanıcısını silebildik.

image

 

 

Peki Gerçek Web Sitelerinde Laboratuvarlardaki Gibi Çıkar Mı?

Öncelikle belirtmek isterim ki gerçek bir web sitesinde kullanıcılar admin panelinde direkt olarak karşımıza çıkmayabilir. Hatta direk /localhost/admin şeklinde de ulaşamayabiliriz. Bu tamamen adminin nasıl oluşturduğu ile ilgilidir. Mesela sunucunun kendine karşı zafiyetinde localhost yazıp bir url vermek yerine file:///etc/passwd şeklinde de bir SSRF saldırısı deneyebiliriz. Ama gösterdiğimiz stockApi ‘den bir kaynak alması veya sayfa kaynağında dahi bir kaynaktan veri aldığını görüp SSRF saldırısına ulaşabiliriz. Kısacası bu öğrendiklerimiz ile gerçek bir web sitesinde SSRF zafiyeti tespit etmenin mümkün olabileceğini belirtmek isterim.

 

Örnek Birkaç SSRF Parametresi

 

 

 

 

Birkaç Örnek SSRF Raporları

https://hackerone.com/reports/826097

https://hackerone.com/reports/341876

https://hackerone.com/reports/811136